package thisuse;

/**
 * @Author Stringzhua
 * @Date 2024/2/29 15:22
 * description:this关键字使用细节
 * 细节1:this关键字可以用来访问本类的属性、方法、构造器
 * 细节2:this用于区分当前类的属性和局部变量
 * 细节3:访问成员方法的语法:this.方法名(参数列表)
 * 细节4:访问构造器语法:this(参数列表):注意只能在构造器中使用
 * 即只能在构造器中去访问另一个构造器
 * 细节5:this不能在类定义的外部使用,只能在类定义的方法中使用
 */
public class ThisDetail {
    public static void main(String[] args) {
//        T t1 = new T();
//        t1.f2();
        T t2 = new T();
        t2.f3();
    }
}

class T {
    String name = "jack";
    int num = 100;
    /*
    * this关键字可以访问本类中属性
    * */
    public void f3(){
        String name="Stringzhua";//局部变量
        System.out.println("name="+name+" num="+num);//传统方式就近原则  Stringzhua 100
        System.out.println("name="+this.name+" num="+this.num);//this访问属性 jack 100

    }
    /*细节4:访问构造器语法:this(参数列表):注意只能在构造器中使用
     *即只能在构造器中去访问另一个构造器
     *
     * 注意:访问构造器语法:this(参数列表); 必须放置第一条语句
     */
    public T() {
        //这里去访问T(String name,int age) 构造器
        //对this的调用必须是构造器中的第一个语句
        this("jack", 100);
        System.out.println("T() 构造器");
        System.out.println("T(String name,int age)构造器");
    }

    public T(String name, int age) {
        System.out.println("T(String name,int age)构造器");
    }

    //访问成员方法的语法:this.方法名(参数列表)
    public void f1() {
//        this("jack",100);//不允许使用
        System.out.println("f1()方法...");
    }
    public void f2() {
        System.out.println("f2()方法...");
        //调用本类的f1方法
        //方式1
        f1();
        //方式2
        this.f1();
    }
}